x11: Factor out some of frame sync code into subroutines
authorRay Strode <rstrode@redhat.com>
Tue, 2 Jun 2020 20:29:03 +0000 (16:29 -0400)
committerRay Strode <rstrode@redhat.com>
Fri, 5 Jun 2020 14:01:13 +0000 (10:01 -0400)
This commit moves some of the end frame sync counter handling
code to subroutines.

It's a minor readability win, but the main motivation is to
make it easier in a subsequent commit to defer updating the
sync counter until a more appropriate time.

gdk/x11/gdksurface-x11.c

index 41d9d4d91dc2a5f72929acd78156080ea723f273..8ac6d0f651cc441f442246029a54b5e59c9de0be 100644 (file)
@@ -360,6 +360,37 @@ gdk_x11_surface_begin_frame (GdkSurface *surface,
     }
 }
 
+static gboolean
+should_sync_frame_drawing (GdkSurface *surface)
+{
+  GdkX11Surface *impl = GDK_X11_SURFACE (surface);
+
+  /* disabled client side */
+  if (!impl->frame_sync_enabled)
+    return FALSE;
+
+  /* disabled compositor side */
+  if (!gdk_x11_screen_supports_net_wm_hint (GDK_SURFACE_SCREEN (surface),
+                                            g_intern_static_string ("_NET_WM_FRAME_DRAWN")))
+    return FALSE;
+
+  return TRUE;
+}
+
+static void
+sync_counter_for_end_frame (GdkSurface *surface)
+{
+  GdkX11Surface *impl = GDK_X11_SURFACE (surface);
+
+  g_assert (!impl->toplevel->in_frame);
+  g_assert (impl->toplevel->extended_update_counter != None);
+  g_assert ((impl->toplevel->current_counter_value % 2) == 0);
+
+  set_sync_counter (GDK_SURFACE_XDISPLAY (surface),
+                    impl->toplevel->extended_update_counter,
+                    impl->toplevel->current_counter_value);
+}
+
 static void
 gdk_x11_surface_end_frame (GdkSurface *surface)
 {
@@ -405,13 +436,9 @@ gdk_x11_surface_end_frame (GdkSurface *surface)
       else
         impl->toplevel->current_counter_value += 1;
 
-      set_sync_counter(GDK_SURFACE_XDISPLAY (surface),
-                      impl->toplevel->extended_update_counter,
-                      impl->toplevel->current_counter_value);
+      sync_counter_for_end_frame (surface);
 
-      if (impl->frame_sync_enabled &&
-          gdk_x11_screen_supports_net_wm_hint (GDK_SURFACE_SCREEN (surface),
-                                              g_intern_static_string ("_NET_WM_FRAME_DRAWN")))
+      if (should_sync_frame_drawing (surface))
         {
           impl->toplevel->frame_pending = TRUE;
           gdk_surface_freeze_updates (surface);